iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0

Day 24 攔截通訊資料並進行 MFKey64 攻擊

本文章的內容僅限學術及研究用途,請勿進行任何違法行為,否則後果自負。

要使用這種破解手法,你需要擁有一張合法的卡片、一個可以攔截通訊內容的裝置 (Proxmark3),並且要能夠讓讀卡機與卡片進行通訊。這種手法是透過攔截讀卡機與卡片之間的通訊資料,然後透過分析資料並進行 MFKey64 攻擊來還原金鑰。

首先,你需要把 Proxmark3 連接到電腦上,然後透過 pm3 (Proxmark3 冰人版所提供的命令列工具) 來執行以下的指令:

hf 14a sniff

這個指令的執行結果如下:

然後你需要把 Proxmark3 放在讀卡機與合法的卡片之間,然後讓讀卡機與卡片進行通訊,示意圖如下:

在此均民以變色龍來模擬讀卡機,請執行以下程式碼執行讀卡指令:

// 在測試網頁的開發者工具中執行 https://taichunmin.idv.tw/chameleon-ultra.js/test.html
await (async ultra => {
  // 載入需要的常數
  const { Buffer, Mf1KeyType } = await import('https://cdn.jsdelivr.net/npm/chameleon-ultra.js@0/+esm')
  const key = Buffer.from('974C262B9278', 'hex') // 讀卡機用的金鑰
  const keyType = Mf1KeyType.KEY_A // 使用金鑰 A
  // 讀取一個區塊 (Block)
  const block = await ultra.cmdMf1ReadBlock({ block: 0, key, keyType })
  // 將讀取到的結果以 HEX 格式顯示
  const bufToHex = buf => buf?.toString('hex').toUpperCase()
  console.log(`讀取到的區塊內容為:${bufToHex(block)}`)
})(vm.ultra)

這段程式的執行結果如下:

確認讀卡機讀取成功後,按下 Proxmark3 上面的按鈕來停止攔截通訊資料,然後執行以下指令來顯示攔截到的通訊資料:

trace list -u -t mf

這段程式的執行結果如下:

Src 欄位代表資料的傳送方,Rdr 代表讀卡機,Tag 代表卡片,* 則是由 Proxmark3 所附加的額外訊息。

Data 欄位代表實際傳送的資料內容,資料會以 HEX 格式表示,如果在資料右邊有一個 ! 代表這個位元組的校驗位元 (parity bit) 有錯誤,有些攻擊手法會利用校驗位元所透漏的訊息。

除了使用校驗位元驗證資料以外,傳送方還會額外計算資料的 CRC16-A 並附帶在資料後面,讓接收方用來驗證資料的正確性,CRC 欄位代表 CRC16-A 的驗證結果。

Annotation 則是 Proxmark3 對資料解析的可能結果,這欄位可以輔助我們了解資料的內容。

我們可以在執行結果中看到 Proxmark3 已經幫我們把金鑰計算出來了,AUTH-A(0) 代表對區塊 0 的金鑰 A 進行認證,然後 key 974C262B9278 就是它計算出來的金鑰。


上一篇
Day 23 MFKey32 攻擊
下一篇
Day 25 M1 卡第一次認證的協定及範例
系列文
免安裝!一起用 JS 來控制開源的 NFC 讀卡機變色龍吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言